package 链表;

import list.ListNode;


/**
 * 经常有读者问我，什么时候需要用虚拟头结点？我这里总结下：当你需要创造一条新链表的时候，可以使用虚拟头结点简化边界情况的处理。
 * 给定一个已排序的链表的头 head ， 删除所有重复的元素，使每个元素只出现一次 。返回 已排序的链表 。
 * @author macy
 * @date 2025/11/4 15:00
 */
public class RemoveListNode {

    public static void main(String[] args) {

    }

    public ListNode deleteDuplicates(ListNode head) {
        if(head==null || head.next==null){
            return head;
        }

        ListNode p = head;
        while(p.next!=null){
            ListNode next=p.next;
            if(p.val == next.val){
                p.next=next.next;
            }else{
                p=p.next;
            }
        }
        return head;
    }

    /**
     * 输入[1,1,2,3,3]
     * 输出[1,2,3,3]
     * 期望输出[1,2,3]
     * 删除重复元素
     * @param head
     * @return
     */
    public ListNode deleteDuplicates1(ListNode head) {
        if(head==null || head.next==null){
            return head;
        }
        ListNode p=head;

        while(p.next!=null){
            ListNode next=p.next;
            if(p.val==next.val){
                p.next=next.next;
            }else{
                p=p.next;
            }
        }
        return head;
    }

}
